<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.9.0">
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  
  <title>预训练语言模型-对数线性语言模型 | Rogerspy&#39;s Home</title>
  
  <meta name="keywords" content="Machine Learning, Deep Learning, NLP">
  
  

  
  <link rel="alternate" href="/atom.xml" title="Rogerspy's Home">
  

  <meta name="HandheldFriendly" content="True">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <!-- meta -->
  
  
  <meta name="theme-color" content="#FFFFFF">
  <meta name="msapplication-TileColor" content="#1BC3FB">
  <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicons/browserconfig.xml">
  

  <!-- link -->
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css">
  
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.css">
  
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.10.1/css/all.min.css">
  
  
  <link rel="shortcut icon" type="image/x-icon" href="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicon.ico">
  <link rel="icon" type="image/x-icon" sizes="32x32" href="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicons/favicon-32x32.png">
  <link rel="apple-touch-icon" type="image/png" sizes="180x180" href="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicons/apple-touch-icon.png">
  <link rel="mask-icon" color="#1BC3FB" href="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicons/safari-pinned-tab.svg">
  <link rel="manifest" href="https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicons/site.webmanifest">
  

  

  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-material-x@19.5/css/style.css">
  

  <script>
    function setLoadingBarProgress(num) {
      document.getElementById('loading-bar').style.width=num+"%";
    }
  </script>
  

  
  
  <!-- 时间线 -->
  <link rel="stylesheet" href="/css/timeline.css">
  <!-- 血小板-->
  <link rel="stylesheet" href="/live2d/css/live2d.css">
  <style>
	.article p .mjx-math {
	    font-family: Menlo,Monaco,courier,monospace,"Lucida Console",'Source Code Pro',"Microsoft YaHei",Helvetica,Arial,sans-serif,Ubuntu;
        background: none;
        padding: 2px;
        border-radius: 4px;
	}
  </style>
</head>

<body>
  
  
  <header class="l_header pure">
  <div id="loading-bar-wrapper">
    <div id="loading-bar" class="pure"></div>
  </div>

	<div class='wrapper'>
		<div class="nav-main container container--flex">
      <a class="logo flat-box" href='/' >
        
          Rogerspy's Home
        
      </a>
			<div class='menu navgation'>
				<ul class='h-list'>
          
  					
  						<li>
								<a class="nav flat-box" href="/blog/"
                  
                  
                  id="blog">
									<i class='fas fa-edit fa-fw'></i>&nbsp;博客
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/video/"
                  
                  
                  id="video">
									<i class='fas fa-film fa-fw'></i>&nbsp;视频小站
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/material/"
                  
                  
                  id="material">
									<i class='fas fa-briefcase fa-fw'></i>&nbsp;学习资料
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/diary/"
                  
                  
                  id="diary">
									<i class='fas fa-book fa-fw'></i>&nbsp;随心记
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/categories/"
                  
                    rel="nofollow"
                  
                  
                  id="categories">
									<i class='fas fa-folder-open fa-fw'></i>&nbsp;分类
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/tags/"
                  
                    rel="nofollow"
                  
                  
                  id="tags">
									<i class='fas fa-hashtag fa-fw'></i>&nbsp;标签
								</a>
							</li>
      			
  						<li>
								<a class="nav flat-box" href="/blog/archives/"
                  
                    rel="nofollow"
                  
                  
                  id="blogarchives">
									<i class='fas fa-archive fa-fw'></i>&nbsp;归档
								</a>
							</li>
      			
      		
				</ul>
			</div>

			
				<div class="m_search">
					<form name="searchform" class="form u-search-form">
						<input type="text" class="input u-search-input" placeholder="搜索" />
						<i class="icon fas fa-search fa-fw"></i>
					</form>
				</div>
			
			<ul class='switcher h-list'>
				
					<li class='s-search'><a class="fas fa-search fa-fw" href='javascript:void(0)'></a></li>
				
				<li class='s-menu'><a class="fas fa-bars fa-fw" href='javascript:void(0)'></a></li>
			</ul>
		</div>

		<div class='nav-sub container container--flex'>
			<a class="logo flat-box"></a>
			<ul class='switcher h-list'>
				<li class='s-comment'><a class="flat-btn fas fa-comments fa-fw" href='javascript:void(0)'></a></li>
        
          <li class='s-toc'><a class="flat-btn fas fa-list fa-fw" href='javascript:void(0)'></a></li>
        
			</ul>
		</div>
	</div>
</header>
	<aside class="menu-phone">
    <header>
		<nav class="menu navgation">
      <ul>
        
          
            <li>
							<a class="nav flat-box" href="/"
                
                
                id="home">
								<i class='fas fa-clock fa-fw'></i>&nbsp;近期文章
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/blog/archives/"
                
                  rel="nofollow"
                
                
                id="blogarchives">
								<i class='fas fa-archive fa-fw'></i>&nbsp;文章归档
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/blog/"
                
                
                id="blog">
								<i class='fas fa-edit fa-fw'></i>&nbsp;我的博客
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/video/"
                
                  rel="nofollow"
                
                
                id="video">
								<i class='fas fa-film fa-fw'></i>&nbsp;我的视频
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/material/"
                
                  rel="nofollow"
                
                
                id="material">
								<i class='fas fa-briefcase fa-fw'></i>&nbsp;学习资料
							</a>
            </li>
          
            <li>
							<a class="nav flat-box" href="/about/"
                
                  rel="nofollow"
                
                
                id="about">
								<i class='fas fa-info-circle fa-fw'></i>&nbsp;关于小站
							</a>
            </li>
          
       
      </ul>
		</nav>
    </header>
	</aside>
<script>setLoadingBarProgress(40);</script>



  <div class="l_body nocover">
    <div class='body-wrapper'>
      <div class='l_main'>
  

  
    <article id="post" class="post white-box article-type-post" itemscope itemprop="blogPost">
      


  <section class='meta'>
    
    
    <div class="meta" id="header-meta">
      
        
  
    <h1 class="title">
      <a href="/2021/03/16/ptm-log-linear-language-model/">
        预训练语言模型-对数线性语言模型
      </a>
    </h1>
  


      
      <div class='new-meta-box'>
        
          
        
          
            
  <div class='new-meta-item author'>
    <a href="https://rogerspy.gitee.io" rel="nofollow">
      
        <i class="fas fa-user" aria-hidden="true"></i>
      
      <p>Rogerspy</p>
    </a>
  </div>


          
        
          
            <div class="new-meta-item date">
  <a class='notlink'>
    <i class="fas fa-calendar-alt" aria-hidden="true"></i>
    <p>2021-03-16</p>
  </a>
</div>

          
        
          
            
  
  <div class='new-meta-item category'>
    <a href='/categories/语言模型/' rel="nofollow">
      <i class="fas fa-folder-open" aria-hidden="true"></i>
      <p>语言模型</p>
    </a>
  </div>


          
        
          
            
  
    <div class="new-meta-item browse busuanzi">
      <a class='notlink'>
        <i class="fas fa-eye" aria-hidden="true"></i>
        <p>
          <span id="busuanzi_value_page_pv">
            <i class="fas fa-spinner fa-spin fa-fw" aria-hidden="true"></i>
          </span>
        </p>
      </a>
    </div>
  


          
        
          
            

          
        
          
            
  
    <div style="margin-right: 10px;">
      <span class="post-time">
        <span class="post-meta-item-icon">
          <i class="fa fa-keyboard"></i>
          <span class="post-meta-item-text">  字数统计: </span>
          <span class="post-count">3.8k字</span>
        </span>
      </span>
      &nbsp; | &nbsp;
      <span class="post-time">
        <span class="post-meta-item-icon">
          <i class="fa fa-hourglass-half"></i>
          <span class="post-meta-item-text">  阅读时长≈</span>
          <span class="post-count">15分</span>
        </span>
      </span>
    </div>
  

          
        
      </div>
      
        <hr>
      
    </div>
  </section>


      <section class="article typo">
        <div class="article-entry" itemprop="articleBody">
          <h1 id="1-前言"><a href="#1-前言" class="headerlink" title="1. 前言"></a>1. 前言</h1><p>回想语言模型问题，我们的任务是在给定前 $j-1$ 个词的情况下，预测第 $j$ 个词：</p>
<script type="math/tex; mode=display">
p(W_j=w_j|W_1=w_1, W_2=w_2, ..., W_{j-1}=w_{j-1}) =  p(w_j|w_1, w_2, ..., w_{j-1})</script><p>在马尔科夫假设条件下：</p>
<script type="math/tex; mode=display">
p(w_j|w_1, w_2, ..., w_{j-1}) \approx  p(w_j|w_{j-n+1:j-1})</script><a id="more"></a>
<p>在进行参数估计的时候，为了避免因数据稀疏化造成的零词频问题，引入了各种平滑技术。在使用平滑技术的时候，有诸多限制，比如稍有不慎可能造成概率和不为 1 的情况，比如对于线性插值法来说，一旦 n-gram 过多引入的 $\pmb{\alpha}$ 超参数的搜索空间也会变大，找到一个合适的 $\pmb{\alpha}$ 会变得很困难，另外参数估计的复杂度也会变得很高；对于加性平滑和减值平滑来说，对于零词频词的概率分配引入过多的人为假设。</p>
<p>下面我们介绍一种新的解决数据稀疏带来的参数估计困难的方法——对数线性语言模型（log-linear language model）。实际上对数线性模型在自然语言处理领域有着广泛的应用，这里只介绍利用对数线性模型对语言进行建模，即所谓的对数线性语言模型。</p>
<h1 id="2-对数线性模型（Log-Linear-Model）"><a href="#2-对数线性模型（Log-Linear-Model）" class="headerlink" title="2. 对数线性模型（Log-Linear Model）"></a>2. 对数线性模型（Log-Linear Model）</h1><p>假设有一个模型可能的输入集 $\mathcal{X}$ ，一个模型可能的有限输出集 $\mathcal{Y}$，一个函数 $f:\mathcal{X}\times\mathcal{Y}\rightarrow\mathbb{R}^d$ 可以将 $(x,y)$ 映射到一个特征向量，其中 $d$ 为向量的维度，另外还有一个参数向量 $v\in\mathbb{R}^d$。对于任意的 $\{(x, y)|x\in \mathcal{X}, y\in \mathcal{Y}\}$，我们定义：</p>
<script type="math/tex; mode=display">
p(y|x; v) = \frac{\exp(v\cdot f(x, y))}{\sum_{y' \in \mathcal{Y}}\exp(v \cdot f(x, y'))}</script><p>其中 $v \cdot f(x,y) = \sum_{k=1}^d v_k \cdot f_k(x, y)$ 表示 $v$ 和 $f(x, y)$ 的内积。上式的意义是在模型参数为 $v$ 时，在 $x$ 的条件下，出现 $y$ 的概率。</p>
<p>既然模型的名字是线性对数模型，那么显然，我们要对上式求对数：</p>
<script type="math/tex; mode=display">
\log p(y|x;v) = v \cdot f(x,y) -\log \sum_{y' \in \mathcal{Y}} \exp(v \cdot f(x, y'))</script><p>令：</p>
<script type="math/tex; mode=display">
g(x) = \log \sum_{y' \in \mathcal{Y}} \exp(v \cdot f(x, y'))</script><p>上式得：</p>
<script type="math/tex; mode=display">
\log p(y|x;v) = v\cdot f(x,y) -g(x)</script><p>从上式可以看出，只要 $x$ 固定，那么 $\log p(y|x, v)$ 就是一个线性方程，所以模型的名称是对数线性模型。</p>
<p>好了，我们已经给出了对数线性模型的定义了，那这样一个模型和语言模型有什么关系呢？假设我们有下面一段话：</p>
<blockquote>
<p>  我是中国少年先锋队队员，我在队旗下宣誓，我决心遵守队章，在中国共产党和共青团的领导下，做个好队员。好好学习，好好工作，好好劳动，准备着为共产主义和祖国的伟大事业，贡献出一切（       ）！</p>
</blockquote>
<p>我们首先令 $\pmb{h}$ 表示 n-gram，$y$ 表示需要填入括号中的词，计算 $v \cdot f(\pmb{h}, y)$ 内积，可以得到：</p>
<div class="table-container">
<table>
<thead>
<tr>
<th style="text-align:center">$v \cdot f(\pmb{h}, y=力量)$</th>
<th style="text-align:center">$v \cdot f(\pmb{h}, y=小明)$</th>
<th style="text-align:center">$v \cdot f(\pmb{h}, y=什么)$</th>
<th style="text-align:center">$\cdots$</th>
<th style="text-align:center">$v \cdot f(\pmb{h}, y=这样)$</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">$8.1$</td>
<td style="text-align:center">$0.5$</td>
<td style="text-align:center">$-2.1$</td>
<td style="text-align:center">$\cdots$</td>
<td style="text-align:center">$0.01$</td>
</tr>
</tbody>
</table>
</div>
<p>要计算表格中的数据，首先要确定 $v$ 和 $f(\cdot)$，这个我们在后面的内容里详细介绍，现在先假定这两个是确定的，然后我们可以根据他们在给定 $\pmb{h}$ 和 $y$ 的情况下计算出相应的内积值。我们计算出来的内积可以是任意实数，包括正数、负数等等。</p>
<p>然后将计算出来的内积取 $e$ 指数：$\exp(v \cdot f(x,y))$，这样就保证了结果是非负数的了。</p>
<p>然后我们对结果求和：$\sum_{y’ \in \mathcal{Y}} \exp(v \cdot f(x, y’))$，再利用求和结果对计算出的每一项进行归一化，这样我们就得到了一个对数线性模型。而该模型表示模型参数 $v$ 确定后，给定历史词 $\pmb{h}$ 的条件下，$y$ 出现的概率。</p>
<p>这样一个结果不就回到了 n-gram 语言模型 $p_{\theta}(w_j|\pmb{h})$，在确定参数 $\theta$ 的情况下，给定历史词 $\pmb{h}$ 的条件下，输出 $y$ 的概率吗？</p>
<h1 id="3-对数线性语言模型（Log-Linear-Language-Model）"><a href="#3-对数线性语言模型（Log-Linear-Language-Model）" class="headerlink" title="3. 对数线性语言模型（Log-Linear Language Model）"></a>3. 对数线性语言模型（Log-Linear Language Model）</h1><p>为了和 n-gram 语言模型的符号保持一致，我们这里重写对数线性模型在语言模型上的定义：</p>
<script type="math/tex; mode=display">
\begin{equation} \nonumber
\begin{aligned}
p_\theta(\pmb{X}=\pmb{x}) &= \prod_{j=1}^l p_{\theta}(W_j=w_j|W_{0:j-1}=w_{0:j-1}) \\\\
                          &= \prod_{j=1}^l \frac{\exp(\theta \cdot f(w_{0:j-1}, w_j))}{\sum_{w_j \in \mathcal{V}}\exp(\theta \cdot f(w_{0:j-1}, w_j))} \\\\
                          &= \prod_{j=1}^l \frac{\exp(\theta \cdot f(w_{j-n+1:j-1}, w_j))}{\sum_{w_j \in \mathcal{V}}\exp(\theta \cdot f(w_{j-n+1:j-1}, w_j))} (马尔科夫假设)\\\\
                          &= \prod_{j=1}^l \frac{\exp(\theta \cdot f(\pmb{h}, w_j))}{\sum_{w_j \in \mathcal{V}}\exp(\theta \cdot f(\pmb{h}, w_j))} \\\\
\end{aligned}
\end{equation}</script><p>其中 $\theta$ 为模型参数，$f(\cdot)$ 表示特征投影。$\theta$ 和 $f(\cdot)$ 都是 $d$ 维向量。</p>
<h2 id="3-1-特征"><a href="#3-1-特征" class="headerlink" title="3.1 特征"></a>3.1 特征</h2><p>对于任意 $\{(x, y)|x\in \mathcal{X}, y\in \mathcal{Y}\}$，$f(x, y) \in \mathbb{R}^d$ 就是一个特征向量，其中 $f_k(x, y), k=[1,2,…,d]$，表示特征。每一维上的特征是可以任意定义的，只要是可以只通过 $\pmb{h}$ 和 $w_j$ 计算的。通常二元法进行定义，比如：</p>
<ul>
<li>n-gram 特征。比如对于三元组特征 “$\langle 我,爱,北京 \rangle$”，如果 $\pmb{h} = \langle 我, 爱 \rangle，w_j=北京$，令 $f_k(\pmb{h}, w_j)=1$，否则 $f_k(\pmb{h},w_j)=0$；</li>
<li>空洞 n-gram 特征。比如 “$\langle 我,爱,北京 \rangle$”、“$\langle我,讨厌,北京\rangle$”、“$\langle 我,在,北京 \rangle$” 等等，只要 $\pmb{h} $ 的倒数第二个词是 “我”，并且 $w_j=北京$ ，那么就令 $f_k(\pmb{h}, w_j)=1$，否则 $f_k(\pmb{h}, w_j)=0$；</li>
<li>拼写特征，通常在英文语言模型上比较常见。比如判断一个词是否以大写字母开头，是否在词中包含数字，是否以元音字母开头等等，如果答案是 “是”，那么就令 $f_k(\pmb{h}, w_j)=1$，否则 $f_k(\pmb{h}, w_j)=0$；</li>
<li>类别特征，使用外部资源判断一个词是不是某种类别。比如是不是地名、是不是组织机构名、是不是名词、是不是形容词等，如果答案是 “是”，那么就令 $f_k(\pmb{h}, w_j)=1$，否则 $f_k(\pmb{h}, w_j)=0$；</li>
<li>$\cdots$</li>
</ul>
<div class="table-container">
<table>
<thead>
<tr>
<th style="text-align:center">n-gram 特征</th>
<th style="text-align:center">空洞 n-gram特征</th>
<th style="text-align:center">拼写特征</th>
<th style="text-align:center">类别特征</th>
<th>…</th>
<th style="text-align:center">$\times \times$ 特征</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">$f_1=1$</td>
<td style="text-align:center">$f_2=1$</td>
<td style="text-align:center">$f_3=0$<br>（$w_j=北京$ 不包含数字）</td>
<td style="text-align:center">$f_3=1$ <br>（$w_j=北京$ 是地名）</td>
<td>…</td>
<td style="text-align:center">$f_d(\pmb{h}, w_j)=0$</td>
</tr>
</tbody>
</table>
</div>
<p>这样，我们对 “$\langle 我，爱，北京 \rangle$” 构建了一个 $f(x, y)=[1,1,0,1,…,0]$ 的特征向量。</p>
<p>总结一下我们构建某种特征的方式：</p>
<script type="math/tex; mode=display">
f(\pmb{h}, w_j) = \begin{cases}
1 & 如果 \pmb{h}，w_j 满足某种条件 \\\\
0 & 否则
\end{cases}</script><p>在特征构建的时候，$d$ 作为超参数出现，特征过多容易造成过拟合，特征不足会造成欠拟合。在构造特征的时候有一个重要的原则是必须遵守的，那就是区分性。也就是说任意两个不同的 $(\pmb{h}_i,w_i)$ 和 $(\pmb{h}_j, w_j)$ 都必须有不同的特征向量。所以通常 $d$ 的选取不应该小于 $V^{n}$ ，$n$ 表示 n-gram。</p>
<h2 id="3-2-特征稀疏"><a href="#3-2-特征稀疏" class="headerlink" title="3.2 特征稀疏"></a>3.2 特征稀疏</h2><p>上述方法构建特征向量有一个很严重的问题——特征稀疏化。通常自然语言处理任务用到的 $d$ 都会非常大。以 3-gram 为例，假设我们给每一个 $(w_{j-2}, w_{j-1}, w_j)$ 分配一个特征值（one-hot），那么 $d=V^3$。如此庞大的特征量，怎样使模型更有效率就成了一个问题。</p>
<p>对于任意给定的 $(\pmb{h},w_j)$ ，定义特征向量 $[f_1(\pmb{h}, w_j), f_2(\pmb{h}, w_j), …, f_d(\pmb{h}, w_j)]$ 中 $f_k(\pmb{h}, w_j)=1$ 的个数：</p>
<script type="math/tex; mode=display">
N(\pmb{h}, w_j) = \sum_{f(\pmb{h}, w_j)=1}f_k(\pmb{h}, w_j)</script><p>通过实际观察我们会发现，通常 $N(\pmb{h}, w_j) \ll d$。最极端的情况，考虑 one-hot 特征向量，只有一个 1，其余全部是 0。</p>
<p>为了解决特征稀疏的问题，我们回过头去看对数线性语言模型的定义：</p>
<script type="math/tex; mode=display">
p_\theta(\pmb{X}=\pmb{x}) = \prod_{j=1}^l \frac{\exp(\theta \cdot f(\pmb{h}, w_j))}{\sum_{w_j \in \mathcal{V}}\exp(\theta \cdot f(\pmb{h}, w_j))}</script><p>通过观察我们会发现，上式的核心是 $\theta \cdot f(\pmb{h},w_j)$ 的计算：</p>
<script type="math/tex; mode=display">
\theta \cdot f(\pmb{h}, w_j) = \sum_{k=1}^d \theta_k\cdot f_k(\pmb{h}, w_j)</script><p>当 $f_k(\pmb{h},w_j)=0$ 时，$\theta_k \cdot f_k(\pmb{h}, w_j)=0$，所以内积最终的结果取决于 $f_k(\pmb{h}, w_j) \ne 0$ 的那些特征。</p>
<p>有了这样一个发现，我们就可以通过一些函数（比如哈希表）找到特征向量中的非零特征对应的索引：</p>
<script type="math/tex; mode=display">
Z(\pmb{h}, w_j) = \{k: f_k(\pmb{h},w_j)=1\}</script><p>有了 $Z(\pmb{h},w_j)$ 以后，可以得到：</p>
<script type="math/tex; mode=display">
\sum_{k=1}^d \theta_k\cdot f_k(\pmb{h}, w_j) = \sum_{k\in Z(\pmb{h}, w_j)} \theta_k</script><p>计算复杂度从 $\mathcal{O}(d)$ 降到 $\mathcal{O}(|Z(\pmb{h}, w_j)|)$。</p>
<h2 id="3-3-Softmax"><a href="#3-3-Softmax" class="headerlink" title="3.3 Softmax"></a>3.3 Softmax</h2><p>得到特征向量以后，我们可以通过 softmax 将特征向量的分数映射到概率分布上:</p>
<script type="math/tex; mode=display">
\mathrm{softmax}([f_1, f_2, ..., f_d]) = \left[\frac{\exp(f_1)}{\sum_{k=1}^V\exp(f_k)}, \frac{\exp(f_2)}{\sum_{k=1}^V\exp(f_k)}, ..., \frac{\exp(f_d)}{\sum_{k=1}^V\exp(f_k)} \right]</script><p>之所以使用 softmax 进行映射，是因为：</p>
<ol>
<li>保持了原来向量的单调性，即原来的特征 $f_a&gt;f_b$，经过 softmax 映射以后仍然是 $f_a’&gt;f_b’$;</li>
<li>softmax 将原来的特征向量映射到了概率分布上，即向量所有元素和为 1；</li>
<li>向量中的每个元素代表其对应的历史词 $\pmb{h}$ 出现的概率。</li>
</ol>
<h2 id="3-4-系数-权重"><a href="#3-4-系数-权重" class="headerlink" title="3.4 系数/权重"></a>3.4 系数/权重</h2><p>一旦我们将特征映射到特征向量以后，就可以计算 $\theta \cdot f(\pmb{h}, w_j)$ 了，其中 $\theta$ 我们称之为特征权重或者特征系数。我们可以将这样一个线性映射看成是 n-gram 的得分，特征权重 $\theta$ 中的每一维决定了特征向量中的每一个向量对 n-gram 最终得分的影响力。假设 $f_k(\pmb{h},w_j)=1$：</p>
<ul>
<li>当 $\theta_k &gt; 0$ 时，表明 $f_k(\pmb{h}, w_j)$ 在 n-gram 中起到了正向作用，即 $(\pmb{h},w_j)$ 出现的概率更高了；</li>
<li>当 $\theta_k&lt;0$ 时，表明 $f_k(\pmb{h}, w_j)$ 在 n-gram 中起到了反向作用，即 $(\pmb{h},w_j)$ 出现的概率更低了；</li>
<li>当 $\theta_k=0$ 时，表明 $f_k(\pmb{h}, w_j)$ 在 n-gram 中没有任何影响，即 $(\pmb{h},w_j)$ 出现的概率不变；</li>
</ul>
<p>知道了 $\theta$ 的意义，那么我们该怎么得到权重系数向量呢？还是靠验证集一个一个试吗？显然不靠谱，接下来就介绍一下 $\theta$ 的估计方法。</p>
<h3 id="3-4-1-对数似然函数"><a href="#3-4-1-对数似然函数" class="headerlink" title="3.4.1 对数似然函数"></a>3.4.1 对数似然函数</h3><p>之前我们定义了对数线性语言模型，每一个 n-gram 的对数概率是：</p>
<script type="math/tex; mode=display">
\log p(w_j|\pmb{h},\theta)</script><p>那么每个句子的对数概率为：</p>
<script type="math/tex; mode=display">
L_\theta(\pmb{X}=\pmb{x}) = \sum_{j=1}^l \log p(w_j|\pmb{h},\theta)</script><p>如果我们将 $\theta$ 作为变量，即：</p>
<script type="math/tex; mode=display">
L_{\pmb{x}}(\theta) = \sum_{j=1}^l \log p(w_j|\pmb{h},\theta)</script><p>可以将此式理解为：参数 $\theta$ 在多大程度上使语言模型接近训练数据。我们的目标是找到一套参数，使得语言模型最大程度接近训练数据：</p>
<script type="math/tex; mode=display">
\theta = \arg \max_{\theta \in \mathbb{R}^d} L_{\pmb{x}}(\theta)</script><p>在考虑如何对上式求解之前，我们思考这样一种情况：假设我们有一个三元组 $s = \langle 我，爱，北京\rangle$ 在训练集中只出现了一次，此时 $\theta$ 应该是什么样的。</p>
<p>根据概率最大原则，因为 $s$ 只出现一次，没有其他三元组和它分割概率，那么它出现的概率最大应该是 1，也就意味着：</p>
<script type="math/tex; mode=display">
p_\theta(\pmb{X}=\pmb{我爱北京天安门}) = \prod_{j=1}^l \frac{\exp(\theta \cdot f(\pmb{h}, w_j))}{\sum_{w_j \in \mathcal{V}}\exp(\theta \cdot f(\pmb{h}, w_j))}=1</script><p>上式分子为（假设特征向量只有$f_k=1$，其余全部为零）：</p>
<script type="math/tex; mode=display">
\exp(\theta_k)</script><p>分母为：</p>
<script type="math/tex; mode=display">
\sum_{w_j \in \mathcal{V}}\exp(\theta_k)</script><p>当且仅当 $\theta_k \rightarrow \infty$ 时</p>
<script type="math/tex; mode=display">
\lim_{\theta_k \rightarrow \infty} \frac{\exp(\theta_k)}{\sum \exp(\theta_k)} = 1</script><p>也就是说，这种情况会导致特征权重接近无穷，这显然是不对的。为了解决这个问题，通常采用的方法是加入正则化。</p>
<h3 id="3-4-2-正则化"><a href="#3-4-2-正则化" class="headerlink" title="3.4.2 正则化"></a>3.4.2 正则化</h3><p>正则化的方法有很多，比如 L1 正则化、L2 正则化等等。常用的正则化是 L2 正则化， 定义如下：</p>
<script type="math/tex; mode=display">
||\theta||^2 = \sum_k \theta_k^2</script><p>其中 $||\theta||$ 表示向量 $\theta$ 的欧拉长度，即 $||\theta|| = \sqrt{\sum_k \theta_k^2}$。经过正则化修正的目标函数为：</p>
<script type="math/tex; mode=display">
L'(\theta)=\sum_{j=1}^l \log p(w_j|\pmb{h};\theta) - \frac{\lambda}{2} \sum_k\theta_k^2</script><p>其中 $\lambda&gt;0$ 是一个超参数。</p>
<p>使用正则化避免出现参数过大的原理是这样的：上式第一项的意义是参数 $\theta$ 能使语言模型在多大程度上接近训练数据；第二项的意义是对参数过大的惩罚项：它希望参数尽可能接近零，因为欧拉距离是大于等于零的，$\lambda$ 也是一个大于零的数，也就是说第二项是一个大于零的数，要想使得 $L’(\theta)$ 尽可能大，就需要上式中第一项尽可能大，而第二项尽可能小。</p>
<h3 id="3-4-3-梯度下降"><a href="#3-4-3-梯度下降" class="headerlink" title="3.4.3 梯度下降"></a>3.4.3 梯度下降</h3><p>有了目标函数以后，我们可以通过梯度下降算法对参数进行更新，直到参数收敛。</p>
<p>参数更新过程如下：</p>
<blockquote>
<ul>
<li>初始化 $\theta=\pmb{0}$ （元素全部是 0 的向量）</li>
<li>重复下面的过程：<ol>
<li>计算 $\delta_k=\frac{dL’(\theta)}{d\theta}, k=[1,2,…,d]$;</li>
<li>计算 $\beta^*=\arg \max_{\beta \in \mathbb{R}}L’(\theta+\beta \delta)$，</li>
<li>更新 $\theta \leftarrow \theta + \beta^*\delta$</li>
</ol>
</li>
</ul>
</blockquote>
<p>其中</p>
<script type="math/tex; mode=display">
\frac{dL'(\theta)}{d_{\theta_k}} = \sum_{i=1}^n f_k(\pmb{h}^{(i)}, w_j^{(i)})-\sum_{i=1}^n\sum_{w_j\in\mathcal{Y}} p(w_j|\pmb{h}^{(i)};\theta)f_k(\pmb{h}_{(i)}, w_j)-\lambda\theta_k</script><h1 id="4-小结"><a href="#4-小结" class="headerlink" title="4. 小结"></a>4. 小结</h1><p>对数线性模型的出现为我们打开了一条通往神经网络语言模型的道路，我们发现对数线性语言模型中蕴含的思想已经具备了神经网络语言模型的雏形。尤其是将 n-gram 扩展到了特征这一概念，为后来的特征向量分布式表示奠定了基础。这里使用的特征构建方法虽然简单，但是与分布式特征向量表示相比也存在着优点，那就是每一维上的特征都具有具体的含义，这就意味着，该模型是具有可解释性的。神经网络语言模型对特征的自动构建也有很多对数线性语言模型特征向量不具备的优势，比如无需人工参与、可以大幅度缩减参数维度、可计算词与词之间的语义关系等。总而言之，对数线性语言模型简约而不简单。</p>

        </div>
        
          


  <section class='meta' id="footer-meta">
    <hr>
    <div class='new-meta-box'>
      
        
          <div class="new-meta-item date" itemprop="dateUpdated" datetime="2021-08-23T01:05:27+08:00">
  <a class='notlink'>
    <i class="fas fa-clock" aria-hidden="true"></i>
    <p>最后更新于 2021年8月23日</p>
  </a>
</div>

        
      
        
          
  
  <div class="new-meta-item meta-tags"><a class="tag" href="/tags/nlp/" rel="nofollow"><i class="fas fa-hashtag" aria-hidden="true"></i>&nbsp;<p>NLP</p></a></div> <div class="new-meta-item meta-tags"><a class="tag" href="/tags/log-linear-language-model/" rel="nofollow"><i class="fas fa-hashtag" aria-hidden="true"></i>&nbsp;<p>Log-Linear Language Model</p></a></div>


        
      
        
          
  <div class="new-meta-item share -mob-share-list">
  <div class="-mob-share-list share-body">
    
      
        <a class="-mob-share-qq" title="QQ好友" rel="external nofollow noopener noreferrer"
          
          href="http://connect.qq.com/widget/shareqq/index.html?url=https://rogerspy.gitee.io/2021/03/16/ptm-log-linear-language-model/&title=预训练语言模型-对数线性语言模型 | Rogerspy's Home&summary=1. 前言回想语言模型问题，我们的任务是在给定前 $j-1$ 个词的情况下，预测第 $j$ 个词：

p(W_j=w_j|W_1=w_1, W_2=w_2, ..., W_{j-1}=w_{j-1}) =  p(w_j|w_1, w_2, ..., w_{j-1})在马尔科夫假设条件下：

p(w_j|w_1, w_2, ..., w_{j-1}) \approx  p(w_j|w_{j-n+1:j-1})"
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/qq.png">
          
        </a>
      
    
      
        <a class="-mob-share-qzone" title="QQ空间" rel="external nofollow noopener noreferrer"
          
          href="https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=https://rogerspy.gitee.io/2021/03/16/ptm-log-linear-language-model/&title=预训练语言模型-对数线性语言模型 | Rogerspy's Home&summary=1. 前言回想语言模型问题，我们的任务是在给定前 $j-1$ 个词的情况下，预测第 $j$ 个词：

p(W_j=w_j|W_1=w_1, W_2=w_2, ..., W_{j-1}=w_{j-1}) =  p(w_j|w_1, w_2, ..., w_{j-1})在马尔科夫假设条件下：

p(w_j|w_1, w_2, ..., w_{j-1}) \approx  p(w_j|w_{j-n+1:j-1})"
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/qzone.png">
          
        </a>
      
    
      
        <a class='qrcode' rel="external nofollow noopener noreferrer" href=''>
        
          <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/wechat.png">
        
        </a>
      
    
      
        <a class="-mob-share-weibo" title="微博" rel="external nofollow noopener noreferrer"
          
          href="http://service.weibo.com/share/share.php?url=https://rogerspy.gitee.io/2021/03/16/ptm-log-linear-language-model/&title=预训练语言模型-对数线性语言模型 | Rogerspy's Home&summary=1. 前言回想语言模型问题，我们的任务是在给定前 $j-1$ 个词的情况下，预测第 $j$ 个词：

p(W_j=w_j|W_1=w_1, W_2=w_2, ..., W_{j-1}=w_{j-1}) =  p(w_j|w_1, w_2, ..., w_{j-1})在马尔科夫假设条件下：

p(w_j|w_1, w_2, ..., w_{j-1}) \approx  p(w_j|w_{j-n+1:j-1})"
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/xaoxuu/assets@19.1.9/logo/128/weibo.png">
          
        </a>
      
    
  </div>
</div>



        
      
    </div>
  </section>


        
        
            <div class="prev-next">
                
                    <section class="prev">
                        <span class="art-item-left">
                            <h6><i class="fas fa-chevron-left" aria-hidden="true"></i>&nbsp;上一页</h6>
                            <h4>
                                <a href="/2021/03/21/neural-language-model-ffnnlm/" rel="prev" title="预训练语言模型-神经网络语言模型：FFNNLM">
                                  
                                      预训练语言模型-神经网络语言模型：FFNNLM
                                  
                                </a>
                            </h4>
                            
                                
                                <h6 class="tags">
                                    <a class="tag" href="/tags/nlp/"><i class="fas fa-hashtag fa-fw" aria-hidden="true"></i>NLP</a> <a class="tag" href="/tags/language-model/"><i class="fas fa-hashtag fa-fw" aria-hidden="true"></i>Language Model</a> <a class="tag" href="/tags/ffnnlm/"><i class="fas fa-hashtag fa-fw" aria-hidden="true"></i>FFNNLM</a>
                                </h6>
                            
                        </span>
                    </section>
                
                
                    <section class="next">
                        <span class="art-item-right" aria-hidden="true">
                            <h6>下一页&nbsp;<i class="fas fa-chevron-right" aria-hidden="true"></i></h6>
                            <h4>
                                <a href="/2021/03/16/ptm_probabilistic_language_model/" rel="prev" title="预训练语言模型-统计语言模型">
                                    
                                        预训练语言模型-统计语言模型
                                    
                                </a>
                            </h4>
                            
                                
                                <h6 class="tags">
                                    <a class="tag" href="/tags/nlp/"><i class="fas fa-hashtag fa-fw" aria-hidden="true"></i>NLP</a> <a class="tag" href="/tags/probabilistic-language-model/"><i class="fas fa-hashtag fa-fw" aria-hidden="true"></i>Probabilistic Language Model</a>
                                </h6>
                            
                        </span>
                    </section>
                
            </div>
        
      </section>
    </article>
  

  
    <!-- 显示推荐文章和评论 -->



  <article class="post white-box comments">
    <section class="article typo">
      <h4><i class="fas fa-comments fa-fw" aria-hidden="true"></i>&nbsp;评论</h4>
      
      
      
        <section id="comments">
          <div id="gitalk-container"></div>
        </section>
      
      
    </section>
  </article>


  




<!-- 根据页面mathjax变量决定是否加载MathJax数学公式js -->

  <!-- MathJax配置，可通过单美元符号书写行内公式等 -->
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    "HTML-CSS": {
      preferredFont: "TeX",
      availableFonts: ["STIX","TeX"],
      linebreaks: { automatic:true },
      EqnChunk: (MathJax.Hub.Browser.isMobile ? 10 : 50)
    },
    tex2jax: {
      inlineMath: [ ["$", "$"], ["\\(","\\)"] ],
      processEscapes: true,
      ignoreClass: "tex2jax_ignore|dno",
      skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
    },
    TeX: {
      equationNumbers: { autoNumber: "AMS" },
      noUndefined: { attributes: { mathcolor: "red", mathbackground: "#FFEEEE", mathsize: "90%" } },
      Macros: { href: "{}" }
    },
    messageStyle: "none"
  });
</script>
<!-- 给MathJax元素添加has-jax class -->
<script type="text/x-mathjax-config">
  MathJax.Hub.Queue(function() {
    var all = MathJax.Hub.getAllJax(), i;
    for(i=0; i < all.length; i += 1) {
      all[i].SourceElement().parentNode.className += (all[i].SourceElement().parentNode.className ? ' ' : '') + 'has-jax';
    }
  });
</script>
<!-- 通过连接CDN加载MathJax的js代码 -->
<script type="text/javascript" async
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
</script>




  <script>
    window.subData = {
      title: '预训练语言模型-对数线性语言模型',
      tools: true
    }
  </script>


</div>
<aside class='l_side'>
  
    
    
      
        
          
          
            <section class='widget shake author'>
  <div class='content pure'>
    
      <div class='avatar'>
        <img class='avatar' src='https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/65-1Z31313530JC.jpeg'/>
      </div>
    
    
    
      <div class="social-wrapper">
        
          
            <a href="/atom.xml"
              class="social fas fa-rss flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
          
            <a href="mailto:rogerspy@163.com"
              class="social fas fa-envelope flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
          
            <a href="https://github.com/rogerspy"
              class="social fab fa-github flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
          
            <a href="https://music.163.com/#/user/home?id=1960721923"
              class="social fas fa-headphones-alt flat-btn"
              target="_blank"
              rel="external nofollow noopener noreferrer">
            </a>
          
        
      </div>
    
  </div>
</section>

          
        
      
        
          
          
            
  <section class='widget toc-wrapper'>
    
<header class='pure'>
  <div><i class="fas fa-list fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;本文目录</div>
  
    <div class='wrapper'><a class="s-toc rightBtn" rel="external nofollow noopener noreferrer" href="javascript:void(0)"><i class="fas fa-thumbtack fa-fw"></i></a></div>
  
</header>

    <div class='content pure'>
      <ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#1-前言"><span class="toc-text">1. 前言</span></a></li><li class="toc-item toc-level-1"><a class="toc-link" href="#2-对数线性模型（Log-Linear-Model）"><span class="toc-text">2. 对数线性模型（Log-Linear Model）</span></a></li><li class="toc-item toc-level-1"><a class="toc-link" href="#3-对数线性语言模型（Log-Linear-Language-Model）"><span class="toc-text">3. 对数线性语言模型（Log-Linear Language Model）</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#3-1-特征"><span class="toc-text">3.1 特征</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#3-2-特征稀疏"><span class="toc-text">3.2 特征稀疏</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#3-3-Softmax"><span class="toc-text">3.3 Softmax</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#3-4-系数-权重"><span class="toc-text">3.4 系数/权重</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#3-4-1-对数似然函数"><span class="toc-text">3.4.1 对数似然函数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3-4-2-正则化"><span class="toc-text">3.4.2 正则化</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#3-4-3-梯度下降"><span class="toc-text">3.4.3 梯度下降</span></a></li></ol></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#4-小结"><span class="toc-text">4. 小结</span></a></li></ol>
    </div>
  </section>


          
        
      
        
          
          
            <section class='widget grid'>
  
<header class='pure'>
  <div><i class="fas fa-map-signs fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;站内导航</div>
  
</header>

  <div class='content pure'>
    <ul class="grid navgation">
      
        <li><a class="flat-box" " href="/"
          
          
          id="home">
          
            <i class="fas fa-clock fa-fw" aria-hidden="true"></i>
          
          近期文章
        </a></li>
      
        <li><a class="flat-box" " href="/blog/"
          
          
          id="blog">
          
            <i class="fas fa-edit fa-fw" aria-hidden="true"></i>
          
          我的博客
        </a></li>
      
        <li><a class="flat-box" " href="/paper_note/"
          
          
          id="paper_note">
          
            <i class="fas fa-book fa-fw" aria-hidden="true"></i>
          
          论文笔记
        </a></li>
      
        <li><a class="flat-box" " href="/algorithm/"
          
          
          id="algorithm">
          
            <i class="fas fa-cube fa-fw" aria-hidden="true"></i>
          
          算法基础
        </a></li>
      
        <li><a class="flat-box" " href="/leetcode/"
          
          
          id="leetcode">
          
            <i class="fas fa-code fa-fw" aria-hidden="true"></i>
          
          Leetcode
        </a></li>
      
        <li><a class="flat-box" " href="/video/"
          
          
          id="video">
          
            <i class="fas fa-film fa-fw" aria-hidden="true"></i>
          
          视频小站
        </a></li>
      
        <li><a class="flat-box" " href="/material/"
          
          
          id="material">
          
            <i class="fas fa-briefcase fa-fw" aria-hidden="true"></i>
          
          学习资料
        </a></li>
      
        <li><a class="flat-box" " href="/dataset/"
          
          
          id="dataset">
          
            <i class="fas fa-database fa-fw" aria-hidden="true"></i>
          
          数据集
        </a></li>
      
        <li><a class="flat-box" " href="/articles/"
          
          
          id="articles">
          
            <i class="fas fa-sticky-note fa-fw" aria-hidden="true"></i>
          
          杂文天地
        </a></li>
      
        <li><a class="flat-box" " href="/blog/archives/"
          
            rel="nofollow"
          
          
          id="blogarchives">
          
            <i class="fas fa-archive fa-fw" aria-hidden="true"></i>
          
          文章归档
        </a></li>
      
        <li><a class="flat-box" " href="/personal_center/"
          
          
          id="personal_center">
          
            <i class="fas fa-university fa-fw" aria-hidden="true"></i>
          
          个人中心
        </a></li>
      
        <li><a class="flat-box" " href="/about/"
          
            rel="nofollow"
          
          
          id="about">
          
            <i class="fas fa-info-circle fa-fw" aria-hidden="true"></i>
          
          关于小站
        </a></li>
      
    </ul>
  </div>
</section>

          
        
      
        
          
          
            <section class='widget list'>
  
<header class='pure'>
  <div><i class="fas fa-terminal fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;机器学习框架</div>
  
</header>

  <div class='content pure'>
    <ul class="entry">
      
        <li><a class="flat-box" title="https://rogerspy.gitee.io/pytorch-zh/" href="https://rogerspy.gitee.io/pytorch-zh/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-star fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;PyTorch 中文文档
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://keras-zh.readthedocs.io/" href="https://keras-zh.readthedocs.io/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-star fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Keras 中文文档
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://tensorflow.google.cn/" href="https://tensorflow.google.cn/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-star fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Tensorflow 中文文档
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="http://scikitlearn.com.cn/" href="http://scikitlearn.com.cn/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-star fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Scikit Learn 中文文档
          </div>
          
        </a></li>
      
    </ul>
  </div>
</section>

          
        
      
        
          
          
            <section class='widget list'>
  
<header class='pure'>
  <div><i class="fas fa-wrench fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;百宝箱</div>
  
</header>

  <div class='content pure'>
    <ul class="entry">
      
        <li><a class="flat-box" title="https://rogerspy.github.io/excalidraw-claymate/" href="https://rogerspy.github.io/excalidraw-claymate/"
          
          
            target="_blank"
          
          >
          <div class='name'>
            
              <i class="fas fa-magic fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Excalidraw-Claymate
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://rogerspy.github.io/jupyterlite/" href="https://rogerspy.github.io/jupyterlite/"
          
          
            target="_blank"
          
          >
          <div class='name'>
            
              <i class="fas fa-terminal fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;JupyterLite
          </div>
          
        </a></li>
      
    </ul>
  </div>
</section>

          
        
      
        
          
          
            <section class='widget list'>
  
<header class='pure'>
  <div><i class="fas fa-eye fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;睁眼看世界</div>
  
</header>

  <div class='content pure'>
    <ul class="entry">
      
        <li><a class="flat-box" title="https://deeplearn.org/" href="https://deeplearn.org/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-link fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Deep Learning Monitor
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://paperswithcode.com/sota" href="https://paperswithcode.com/sota"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-link fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Browse State-of-the-Art
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://huggingface.co/transformers/" href="https://huggingface.co/transformers/"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-link fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Transformers
          </div>
          
        </a></li>
      
        <li><a class="flat-box" title="https://huggingface.co/models" href="https://huggingface.co/models"
          
          
          >
          <div class='name'>
            
              <i class="fas fa-link fa-fw" aria-hidden="true"></i>
            
            &nbsp;&nbsp;Transformers-models
          </div>
          
        </a></li>
      
    </ul>
  </div>
</section>

          
        
      
        
          
          
            
  <section class='widget category'>
    
<header class='pure'>
  <div><i class="fas fa-folder-open fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;文章分类</div>
  
    <a class="rightBtn"
    
      rel="nofollow"
    
    
    href="/categories/"
    title="categories/">
    <i class="fas fa-expand-arrows-alt fa-fw"></i></a>
  
</header>

    <div class='content pure'>
      <ul class="entry">
        
          <li><a class="flat-box" title="/categories/nl2sql/" href="/categories/nl2sql/"><div class='name'>NL2SQL</div><div class='badge'>(1)</div></a></li>
        
          <li><a class="flat-box" title="/categories/nlp/" href="/categories/nlp/"><div class='name'>NLP</div><div class='badge'>(23)</div></a></li>
        
          <li><a class="flat-box" title="/categories/博客转载/" href="/categories/博客转载/"><div class='name'>博客转载</div><div class='badge'>(5)</div></a></li>
        
          <li><a class="flat-box" title="/categories/数据结构与算法/" href="/categories/数据结构与算法/"><div class='name'>数据结构与算法</div><div class='badge'>(11)</div></a></li>
        
          <li><a class="flat-box" title="/categories/知识图谱/" href="/categories/知识图谱/"><div class='name'>知识图谱</div><div class='badge'>(3)</div></a></li>
        
          <li><a class="flat-box" title="/categories/论文解读/" href="/categories/论文解读/"><div class='name'>论文解读</div><div class='badge'>(2)</div></a></li>
        
          <li><a class="flat-box" title="/categories/语言模型/" href="/categories/语言模型/"><div class='name'>语言模型</div><div class='badge'>(10)</div></a></li>
        
      </ul>
    </div>
  </section>


          
        
      
        
          
          
            
  <section class='widget tagcloud'>
    
<header class='pure'>
  <div><i class="fas fa-fire fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;热门标签</div>
  
    <a class="rightBtn"
    
      rel="nofollow"
    
    
    href="/tags/"
    title="tags/">
    <i class="fas fa-expand-arrows-alt fa-fw"></i></a>
  
</header>

    <div class='content pure'>
      <a href="/tags/attention/" style="font-size: 16.86px; color: #868686">Attention</a> <a href="/tags/cnnlm/" style="font-size: 14px; color: #999">CNNLM</a> <a href="/tags/data-structure/" style="font-size: 14px; color: #999">Data Structure</a> <a href="/tags/deep/" style="font-size: 14px; color: #999">Deep</a> <a href="/tags/ffnnlm/" style="font-size: 14px; color: #999">FFNNLM</a> <a href="/tags/gaussian/" style="font-size: 14px; color: #999">Gaussian</a> <a href="/tags/initialization/" style="font-size: 14px; color: #999">Initialization</a> <a href="/tags/kg/" style="font-size: 16.86px; color: #868686">KG</a> <a href="/tags/lstm/" style="font-size: 14px; color: #999">LSTM</a> <a href="/tags/lstmlm/" style="font-size: 14px; color: #999">LSTMLM</a> <a href="/tags/language-model/" style="font-size: 16.86px; color: #868686">Language Model</a> <a href="/tags/log-linear-language-model/" style="font-size: 14px; color: #999">Log-Linear Language Model</a> <a href="/tags/nlp/" style="font-size: 19.71px; color: #727272">NLP</a> <a href="/tags/nmt/" style="font-size: 22.57px; color: #5f5f5f">NMT</a> <a href="/tags/norm/" style="font-size: 14px; color: #999">Norm</a> <a href="/tags/probabilistic-language-model/" style="font-size: 14px; color: #999">Probabilistic Language Model</a> <a href="/tags/rnnlm/" style="font-size: 14px; color: #999">RNNLM</a> <a href="/tags/roc-auc/" style="font-size: 14px; color: #999">ROC-AUC</a> <a href="/tags/transformer/" style="font-size: 24px; color: #555">Transformer</a> <a href="/tags/context2vec/" style="font-size: 14px; color: #999">context2vec</a> <a href="/tags/divide-conquer/" style="font-size: 14px; color: #999">divide-conquer</a> <a href="/tags/insertion/" style="font-size: 16.86px; color: #868686">insertion</a> <a href="/tags/insertion-deletion/" style="font-size: 15.43px; color: #8f8f8f">insertion-deletion</a> <a href="/tags/knowledge-modelling/" style="font-size: 15.43px; color: #8f8f8f">knowledge-modelling</a> <a href="/tags/nl2infographic/" style="font-size: 14px; color: #999">nl2infographic</a> <a href="/tags/nl2sql/" style="font-size: 14px; color: #999">nl2sql</a> <a href="/tags/ontology/" style="font-size: 14px; color: #999">ontology</a> <a href="/tags/parallel-recurrent/" style="font-size: 14px; color: #999">parallel-recurrent</a> <a href="/tags/pytorch/" style="font-size: 14px; color: #999">pytorch</a> <a href="/tags/queue/" style="font-size: 18.29px; color: #7c7c7c">queue</a> <a href="/tags/sparse/" style="font-size: 14px; color: #999">sparse</a> <a href="/tags/stack/" style="font-size: 14px; color: #999">stack</a> <a href="/tags/tensorflow/" style="font-size: 14px; color: #999">tensorflow</a> <a href="/tags/text2viz/" style="font-size: 14px; color: #999">text2viz</a> <a href="/tags/weighted-head/" style="font-size: 14px; color: #999">weighted-head</a> <a href="/tags/半监督语言模型/" style="font-size: 14px; color: #999">半监督语言模型</a> <a href="/tags/双数组前缀树/" style="font-size: 14px; color: #999">双数组前缀树</a> <a href="/tags/推荐系统/" style="font-size: 14px; color: #999">推荐系统</a> <a href="/tags/数据结构/" style="font-size: 21.14px; color: #686868">数据结构</a> <a href="/tags/数组/" style="font-size: 14px; color: #999">数组</a> <a href="/tags/时间复杂度/" style="font-size: 14px; color: #999">时间复杂度</a> <a href="/tags/算法/" style="font-size: 14px; color: #999">算法</a> <a href="/tags/评估方法/" style="font-size: 14px; color: #999">评估方法</a> <a href="/tags/词向量/" style="font-size: 14px; color: #999">词向量</a> <a href="/tags/隐式正则化/" style="font-size: 14px; color: #999">隐式正则化</a>
    </div>
  </section>


          
        
      
        
          
          
            


  <section class='widget music'>
    
<header class='pure'>
  <div><i class="fas fa-compact-disc fa-fw" aria-hidden="true"></i>&nbsp;&nbsp;最近在听</div>
  
    <a class="rightBtn"
    
      rel="external nofollow noopener noreferrer"
    
    
      target="_blank"
    
    href="https://music.163.com/#/user/home?id=1960721923"
    title="https://music.163.com/#/user/home?id=1960721923">
    <i class="far fa-heart fa-fw"></i></a>
  
</header>

    <div class='content pure'>
      
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer@1.7.0/dist/APlayer.min.css">
  <div class="aplayer"
    data-theme="#1BCDFC"
    
    
    data-mode="circulation"
    data-server="netease"
    data-type="playlist"
    data-id="2957571193"
    data-volume="0.7">
  </div>
  <script src="https://cdn.jsdelivr.net/npm/aplayer@1.7.0/dist/APlayer.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/meting@1.1.0/dist/Meting.min.js"></script>


    </div>
  </section>


          
        
      
    

  
</aside>

<footer id="footer" class="clearfix">
  <div id="sitetime"></div>
  
  
    <div class="social-wrapper">
      
        
          <a href="/atom.xml"
            class="social fas fa-rss flat-btn"
            target="_blank"
            rel="external nofollow noopener noreferrer">
          </a>
        
      
        
          <a href="mailto:rogerspy@163.com"
            class="social fas fa-envelope flat-btn"
            target="_blank"
            rel="external nofollow noopener noreferrer">
          </a>
        
      
        
          <a href="https://github.com/rogerspy"
            class="social fab fa-github flat-btn"
            target="_blank"
            rel="external nofollow noopener noreferrer">
          </a>
        
      
        
          <a href="https://music.163.com/#/user/home?id=1960721923"
            class="social fas fa-headphones-alt flat-btn"
            target="_blank"
            rel="external nofollow noopener noreferrer">
          </a>
        
      
    </div>
  
  <br>
  <div><p>博客内容遵循 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议</a></p>
</div>
  <div>
    本站使用
    <a href="https://xaoxuu.com/wiki/material-x/" target="_blank" class="codename">Material X</a>
    作为主题
    
      ，
      总访问量为
      <span id="busuanzi_value_site_pv"><i class="fas fa-spinner fa-spin fa-fw" aria-hidden="true"></i></span>
      次
    
    。
  </div>
	</footer>

<script>setLoadingBarProgress(80);</script>
<!-- 点击特效，输入特效 运行时间 -->
<script type="text/javascript" src="/cool/cooltext.js"></script>
<script type="text/javascript" src="/cool/clicklove.js"></script>
<script type="text/javascript" src="/cool/sitetime.js"></script>



      <script>setLoadingBarProgress(60);</script>
    </div>
    <a class="s-top fas fa-arrow-up fa-fw" href='javascript:void(0)'></a>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>

  <script>
    var GOOGLE_CUSTOM_SEARCH_API_KEY = "";
    var GOOGLE_CUSTOM_SEARCH_ENGINE_ID = "";
    var ALGOLIA_API_KEY = "";
    var ALGOLIA_APP_ID = "";
    var ALGOLIA_INDEX_NAME = "";
    var AZURE_SERVICE_NAME = "";
    var AZURE_INDEX_NAME = "";
    var AZURE_QUERY_KEY = "";
    var BAIDU_API_ID = "";
    var SEARCH_SERVICE = "hexo" || "hexo";
    var ROOT = "/"||"/";
    if(!ROOT.endsWith('/'))ROOT += '/';
  </script>

<script src="//instant.page/1.2.2" type="module" integrity="sha384-2xV8M5griQmzyiY3CDqh1dn4z3llDVqZDqzjzcY+jCBCk/a5fXJmuZ/40JJAPeoU"></script>


  <script async src="https://cdn.jsdelivr.net/npm/scrollreveal@4.0.5/dist/scrollreveal.min.js"></script>
  <script type="text/javascript">
    $(function() {
      const $reveal = $('.reveal');
      if ($reveal.length === 0) return;
      const sr = ScrollReveal({ distance: 0 });
      sr.reveal('.reveal');
    });
  </script>


  <script src="https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.js"></script>
  <script type="text/javascript">
    $(function() {
      Waves.attach('.flat-btn', ['waves-button']);
      Waves.attach('.float-btn', ['waves-button', 'waves-float']);
      Waves.attach('.float-btn-light', ['waves-button', 'waves-float', 'waves-light']);
      Waves.attach('.flat-box', ['waves-block']);
      Waves.attach('.float-box', ['waves-block', 'waves-float']);
      Waves.attach('.waves-image');
      Waves.init();
    });
  </script>


  <script async src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-busuanzi@2.3/js/busuanzi.pure.mini.js"></script>




  
  
  
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-backstretch/2.0.4/jquery.backstretch.min.js"></script>
    <script type="text/javascript">
      $(function(){
        if ('.cover') {
          $('.cover').backstretch(
          ["https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/a0c9e6f9efad8b731cb7376504bd10d79d2053.jpg"],
          {
            duration: "6000",
            fade: "2500"
          });
        } else {
          $.backstretch(
          ["https://cdn.jsdelivr.net/gh/rogerspy/blog-imgs/a0c9e6f9efad8b731cb7376504bd10d79d2053.jpg"],
          {
            duration: "6000",
            fade: "2500"
          });
        }
      });
    </script>
  







  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css">
  <script src="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js"></script>
  <script type="text/javascript">
    var gitalk = new Gitalk({
      clientID: "35a5e4dc744cc7d162af",
      clientSecret: "7b5a409e17ce0c1971f284eac9f8902eb4b8feba",
      repo: "rogerspy.github.io",
      owner: "Rogerspy",
      admin: "Rogerspy",
      
        id: "/wiki/material-x/",
      
      distractionFreeMode: false  // Facebook-like distraction free mode
    });
    gitalk.render('gitalk-container');
  </script>





  <script src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-material-x@19.5/js/app.js"></script>


  <script src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-material-x@19.5/js/search.js"></script>




<!-- 复制 -->
<script src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js"></script>
<script>
  let COPY_SUCCESS = "复制成功";
  let COPY_FAILURE = "复制失败";
  /*页面载入完成后，创建复制按钮*/
  !function (e, t, a) {
    /* code */
    var initCopyCode = function(){
      var copyHtml = '';
      copyHtml += '<button class="btn-copy" data-clipboard-snippet="">';
      copyHtml += '  <i class="fa fa-copy"></i><span>复制</span>';
      copyHtml += '</button>';
      $(".highlight .code pre").before(copyHtml);
      var clipboard = new ClipboardJS('.btn-copy', {
        target: function(trigger) {
          return trigger.nextElementSibling;
        }
      });

      clipboard.on('success', function(e) {
        //您可以加入成功提示
        console.info('Action:', e.action);
        console.info('Text:', e.text);
        console.info('Trigger:', e.trigger);
        success_prompt(COPY_SUCCESS);
        e.clearSelection();
      });
      clipboard.on('error', function(e) {
        //您可以加入失败提示
        console.error('Action:', e.action);
        console.error('Trigger:', e.trigger);
        fail_prompt(COPY_FAILURE);
      });
    }
    initCopyCode();

  }(window, document);

  /**
   * 弹出式提示框，默认1.5秒自动消失
   * @param message 提示信息
   * @param style 提示样式，有alert-success、alert-danger、alert-warning、alert-info
   * @param time 消失时间
   */
  var prompt = function (message, style, time)
  {
      style = (style === undefined) ? 'alert-success' : style;
      time = (time === undefined) ? 1500 : time*1000;
      $('<div>')
          .appendTo('body')
          .addClass('alert ' + style)
          .html(message)
          .show()
          .delay(time)
          .fadeOut();
  };

  // 成功提示
  var success_prompt = function(message, time)
  {
      prompt(message, 'alert-success', time);
  };

  // 失败提示
  var fail_prompt = function(message, time)
  {
      prompt(message, 'alert-danger', time);
  };

  // 提醒
  var warning_prompt = function(message, time)
  {
      prompt(message, 'alert-warning', time);
  };

  // 信息提示
  var info_prompt = function(message, time)
  {
      prompt(message, 'alert-info', time);
  };

</script>


<!-- fancybox -->
<script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>
<script>
  let LAZY_LOAD_IMAGE = "";
  $(".article-entry").find("fancybox").find("img").each(function () {
      var element = document.createElement("a");
      $(element).attr("data-fancybox", "gallery");
      $(element).attr("href", $(this).attr("src"));
      /* 图片采用懒加载处理时,
       * 一般图片标签内会有个属性名来存放图片的真实地址，比如 data-original,
       * 那么此处将原本的属性名src替换为对应属性名data-original,
       * 修改如下
       */
       if (LAZY_LOAD_IMAGE) {
         $(element).attr("href", $(this).attr("data-original"));
       }
      $(this).wrap(element);
  });
</script>





  <script>setLoadingBarProgress(100);</script>
</body>
</html>
